public class ArrayStack<T> implements StackInterface<T> {
    private Object[] stackArray; // 存储栈元素的数组
    private int top; // 栈顶指针（-1表示空栈）
    private int capacity; // 栈的最大容量

    // 构造方法：指定栈初始容量
    public ArrayStack(int capacity) {
        this.capacity = capacity;
        this.stackArray = new Object[capacity];
        this.top = -1; // 初始化为空栈
    }

    // 判断栈是否为空
    @Override
    public boolean isEmpty() {
        return top == -1;
    }

    // 判断栈是否已满
    @Override
    public boolean isFull() {
        return top == capacity - 1;
    }

    // 入栈操作
    @Override
    public void push(T data) {
        if (isFull()) {
            throw new RuntimeException("顺序栈已满，无法执行push操作");
        }
        stackArray[++top] = data; // 栈顶指针上移后存入元素
    }

    // 出栈操作
    @Override
    @SuppressWarnings("unchecked")
    public T pop() {
        if (isEmpty()) {
            throw new RuntimeException("顺序栈为空，无法执行pop操作");
        }
        return (T) stackArray[top--]; // 返回栈顶元素后指针下移
    }

    // 查看栈顶元素
    @Override
    @SuppressWarnings("unchecked")
    public T peek() {
        if (isEmpty()) {
            throw new RuntimeException("顺序栈为空，无法执行peek操作");
        }
        return (T) stackArray[top];
    }

    // 获取栈元素个数
    @Override
    public int size() {
        return top + 1;
    }

    // 清空栈
    @Override
    public void clear() {
        top = -1; // 指针重置为-1，逻辑清空栈（数组元素无需显式置空）
    }
}